#include <ESP8266WiFi.h> // 本程序使用ESP8266WiFi库

const char *ssid = "HUAWEI";	   // 需要连接到的WiFi名
const char *password = "21937603"; // 连接的WiFi密码

void setup()
{
	Serial.begin(115200); // 初始化串口通讯波特率为115200

	WiFi.mode(WIFI_STA);				// 设置Wifi工作模式为STA,默认为AP+STA模式
	WiFi.begin(ssid, password);			// 通过wifi名和密码连接到Wifi
	Serial.print("\r\nConnecting to "); // 串口监视器输出网络连接信息
	Serial.print(ssid);
	Serial.println(" ..."); // 显示NodeMCU正在尝试WiFi连接

	int i = 0;							  // 检查WiFi是否连接成功
	while (WiFi.status() != WL_CONNECTED) // WiFi.status()函数的返回值是由NodeMCU的WiFi连接状态所决定的。
	{									  // 如果WiFi连接成功则返回值为WL_CONNECTED
		delay(1000);					  // 此处通过While循环让NodeMCU每隔一秒钟检查一次WiFi.status()函数返回值
		Serial.print("waiting for ");
		Serial.print(i++);
		Serial.println("s...");
	}

	Serial.println("");				   // WiFi连接成功后
	Serial.println("WiFi connected!"); // NodeMCU将通过串口监视器输出"连接成功"信息。
	Serial.print("IP address: ");	   // 同时还将输出NodeMCU的IP地址。这一功能是通过调用
	Serial.println(WiFi.localIP());	   // WiFi.localIP()函数来实现的。该函数的返回值即NodeMCU的IP地址。
}

const char *host = "192.168.8.104";
const uint16_t port = 32;

void loop()
{
	/* 新建一个WiFiClient类对象，作为TCP客户端对象 */
	WiFiClient tcpclient;

	/* 建立TCP连接 */
	Serial.print("connecting to ");
	Serial.print(host);
	Serial.print(':');
	Serial.println(port);
	/* 如果连接成功，则发送一个字符串到TCP服务器 */
	Serial.println("Connected to TCPServer, sending data to server");
	if (tcpclient.connected())
	{
		tcpclient.println("hello, I am ESP8266.");
	}

	/* 等待TCP服务器返回消息 */
	Serial.println("waiting for receive from remote Tcpserver...");
	while (tcpclient.available() == 0)
	{
	}
	Serial.println("received data:");
	while (tcpclient.available())
	{
		char ch = static_cast<char>(tcpclient.read());
		Serial.print(ch);
	}
	Serial.println();
}